home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE08 / DATADICT / DBCTRL.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-10-23  |  9.5 KB  |  278 lines

  1. unit Dbctrl;
  2.  
  3. interface
  4.  
  5. uses
  6.   DB,
  7.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  8.   Forms, Dialogs, DBTables, Grids;
  9.  
  10.  
  11. type
  12.   TbuildResultType = (success, NotValidDD, DBerror);
  13.  
  14.  
  15. type
  16.   TDictCtrlForm = class(TForm)
  17.     DBSG: TStringGrid;
  18.   private
  19.     { Private declarations }
  20.   public
  21.     tableList : Tstrings;
  22.     function FillTableDef(qry : tquery; tbl : string): tbuildResultType;
  23.     { Public declarations }
  24.   end;
  25.  
  26. var
  27.   DictCtrlForm: TDictCtrlForm;
  28.  
  29. function setFieldDef(var tableToDefine : Ttable; const WhichTable, WhichField : string): boolean;
  30.  
  31. implementation
  32.  
  33. const
  34.       {indexes into dbDefineStringGrid.cols}
  35.       tablename = 0;  {string 20}
  36.       tabletype = 1;  {string 20}
  37.       fieldname = 2;  {string[20];}
  38.       tag       = 3;  {string 20  tfield.tag}
  39.       scrprompt = 4;  {string[40]; {tfield.DisplayName}
  40.       scrformat = 5;  {string[80]; {tfield.DisplayText -- an editmask}
  41.       grdprompt = 6;  {string[10];}
  42.       grdwidth  = 7;  {smallint    {tfield.DisplayWidth}
  43.       fldtype   = 8;  {string[1];  {FieldTypeLtr}
  44.       fldlen    = 9;  {smallint    {tfield.size}
  45.       flddec    = 10; {smallint}
  46.       fldidx    = 11; {boolean;}
  47.       idxexp    = 12; {string;}
  48.       tab_order = 13; {integer;}
  49.       isrequired  = 14; {boolean;    {tfield.required}
  50.       defaultis   = 15; {string[80];}
  51.       editmaskis  = 16; {string[80]; {tfield.editMask}
  52.       minval    = 17; {ftfloat  tfield.minvalue}
  53.       maxval    = 18; {ftfloat  tfield.maxvalue}
  54.       vallist   = 19; {ftmemo   list of valid strings}
  55.       { define      documentation only
  56.         validvalue  documentation only
  57.         notes       documentation only}
  58.       hintTxt   = 20;  {string 120}
  59.       helpid    = 21;  {longint;}
  60.       {help, memo only used if helpid not null or 0}
  61.       haslink   = 22;  {boolean;}
  62.       srclinktbl = 23; {string[20];}
  63.       srclinkfld = 24; {string[20];}
  64.       iscalc     = 25; {boolean;}
  65.       formula    = 26; {memo only used if iscalc true}
  66.  
  67. {$R *.DFM}
  68.  
  69.   {
  70.   ThisField := TstringField.Create(Self);
  71.   ThisField.FieldName := whichfield;
  72.   ThisField.Name := whichTable.Name + ThisField.FieldName;
  73.   ThisField.Index := whichTable.FieldCount;
  74.   ThisField.DataSet := whichTable;}
  75.  
  76.  
  77. function setFieldDef(var tableToDefine : Ttable; const WhichTable, WhichField : string): boolean;
  78. var
  79.   foundit : boolean;
  80.   tablenum,
  81.   start_row, end_row, cur_row : integer;
  82. begin
  83. with DictCtrlForm do begin
  84.   Result := false;
  85.   foundit := false;
  86.   {Is table loaded?}
  87.   for tablenum := 0 to DBSG.ColCount - 1 do
  88.     if DBSG.cols[0].strings[tablenum] = whichTable
  89.       then begin foundit := true; start_row := tablenum; break; end;
  90.       {done looking for table name}
  91.   if not foundit
  92.       then exit {returns false}
  93.       else begin
  94.         for tablenum := start_row to DBSG.ColCount - 1 do
  95.           if DBSG.cols[0].strings[tablenum] <> whichTable
  96.             then begin end_row := tablenum; break; end;
  97.         end;
  98.   foundit := false;
  99.   for cur_row := start_row to end_row do
  100.     if DBSG.cells[fieldname,cur_row] = whichField
  101.       then begin foundit := true; break; end;
  102.   if foundit
  103.     then begin
  104.       if DBSG.cells[scrFormat,cur_row] <> ''
  105.         then TableToDefine.findField(whichfield).EditMask
  106.              := DBSG.cells[scrFormat,cur_row];
  107.  
  108.  
  109.       {,,, rest of field def}
  110.       end;
  111.   end;
  112. end;
  113.  
  114.  
  115.  
  116.  
  117.  
  118. function TdictCtrlForm.FillTableDef(qry : tquery; tbl : string): tBuildresulttype;
  119. var
  120.   tmpstr : string;
  121.   tablefound : boolean;
  122.   tablenum,
  123.   cur_row   : integer;
  124.   dbstrgrd : tstringGrid;
  125. begin
  126.   try
  127.     qry.close;
  128.     qry.sql.clear;
  129.     qry.params.clear;
  130.     tmpstr := 'SELECT * FROM '+tbl;
  131.     qry.sql.add(tmpstr);
  132.     qry.prepare;
  133.     qry.open;
  134.     qry.first;
  135.     { get tablenames in data dictionary, create Ptabledefs linked list}
  136.     if qry.findfield('TABLE_NAME') = nil
  137.       then begin
  138.          cursor := crDefault;
  139.          MessageDlg('not a Data Dictionary Database.', mtInformation, [mbOK], 0);
  140.          result := NotvalidDD;
  141.          exit;
  142.          end;
  143.     tableList := tstringlist.create;
  144.     tableList.add(qry.findfield('TABLE_NAME').text);  {get first one}
  145.     qry.next;
  146.     while not qry.eof do begin
  147.       tablefound := false;
  148.       tmpstr := qry.findfield('TABLE_NAME').text;
  149.       for tablenum := 0 to tableList.count - 1 do
  150.         if TableList.strings[tablenum] = tmpstr
  151.           then begin tablefound := true; break; end;
  152.           {done looking for table name}
  153.       if not tablefound
  154.           then  TableList.add(tmpstr);
  155.       qry.next;
  156.       end; {while searching for table names}
  157.     {now fill in the fields for each table}
  158.     qry.close;
  159.     qry.sql.clear;
  160.     qry.params.clear;
  161.     tmpstr := 'SELECT * FROM '+tbl+' where TABLE_NAME = :tableid';
  162.     qry.sql.add(tmpstr);
  163.     qry.prepare;
  164.     cur_row := 0;
  165.     for tablenum := 0 to TableList.count - 1 do begin
  166.       qry.close;
  167.       qry.ParamByName('tableid').asString := tableList.strings[tablenum];
  168.       qry.open;
  169.       qry.first;
  170.       while not qry.eof do begin
  171.         DBSG.cells[tablename,cur_row] := qry.findfield('TABLE_NAME').text;
  172.         DBSG.cells[fieldname,cur_row] := qry.findfield('FIELD_NAME').text;
  173.         DBSG.cells[tag,cur_row] := qry.findfield('TAG').text;
  174.         DBSG.cells[scrprompt,cur_row] := qry.findfield('SCR_PROMPT').text;
  175.         DBSG.cells[scrformat,cur_row] := qry.findfield('SCR_FMT').text;
  176.         DBSG.cells[grdprompt,cur_row] := qry.findfield('GRD_PROMPT').text;
  177.         DBSG.cells[grdwidth,cur_row] := qry.findfield('GRD_WIDTH').asString;
  178.         DBSG.cells[fldtype  ,cur_row] := qry.findfield('FIELD_TYPE').text;
  179.         DBSG.cells[fldlen   ,cur_row] := qry.findfield('FIELD_LEN').asString;
  180.         DBSG.cells[flddec   ,cur_row] := qry.findfield('FIELD_DEC').asString;
  181.         DBSG.cells[fldidx   ,cur_row] := qry.findfield('FIELD_IDX').asString;
  182.         DBSG.cells[idxexp   ,cur_row] := qry.findfield('IDX_EXPRES').text; {first line only}
  183.         DBSG.cells[tab_order ,cur_row] := qry.findfield('TAB_ORDER').asString;
  184.         DBSG.cells[isrequired ,cur_row] := qry.findfield('REQUIRED').asString;
  185.         DBSG.cells[defaultis  ,cur_row] := qry.findfield('DEFAULT').text;
  186.         DBSG.cells[editmaskis ,cur_row] := qry.findfield('EDITMASK').text;
  187.         DBSG.cells[minval   ,cur_row] := qry.findfield('MINVAL').asString;
  188.         DBSG.cells[maxval   ,cur_row] := qry.findfield('MAXVAL').asString;
  189.         DBSG.cells[vallist  ,cur_row] := qry.findfield('VALLIST').text; {first line only}
  190.         DBSG.cells[hinttxt  ,cur_row] := qry.findfield('HINT').text;
  191.         DBSG.cells[helpid   ,cur_row] := qry.findfield('HELPID').asSTring;
  192.         DBSG.cells[haslink  ,cur_row] := qry.findfield('HASLINK').asSTring;
  193.         DBSG.cells[srclinktbl ,cur_row] := qry.findfield('SRCLINKTBL').text;
  194.         DBSG.cells[srclinkfld ,cur_row] := qry.findfield('SRCLINKFLD').text;
  195.         DBSG.cells[iscalc   ,cur_row] := qry.findfield('IS_CALC').asString;
  196.         DBSG.cells[formula  ,cur_row] := qry.findfield('FORMULA').text;
  197.  
  198.         DBSG.rowCount := cur_row+1;
  199.         inc(cur_row);
  200.         qry.next;
  201.         end;
  202.       end;
  203.     result := success;
  204.   except
  205.      on EdataBaseError do begin
  206.        cursor := crDefault;
  207.        MessageDlg('Not a data base file or other DB error', mtInformation, [mbOK], 0);
  208.        result := DBerror;
  209.        end;
  210.      end; {of exceptions}
  211.  
  212. end;
  213. (***
  214.       fieldname = 1;  { string[20];}
  215.       scrprompt = 2;  { string[20]; {tfield.DisplayName}
  216.       scrformat = 3;  {string[20]; {tfield.DisplayText -- an editmask}
  217.       grdprompt = 4;  {string[10];}
  218.       grdwidth  = 5;  {integer;    {tfield.DisplayWidth}
  219.       fldtype   = 6;  {string[1];  {FieldTypeLtr}
  220.       fldlen    = 7;  {integer;    {tfield.size}
  221.       flddec    = 8;  {integer;}
  222.       fldidx    = 9;  {boolean;}
  223.       idxexp    = 10; {string;}
  224.       taborder  = 11; {integer;}
  225.       required  = 12; {boolean;    {tfield.required}
  226.       default   = 13; {string[80];}
  227.       editmask  = 14; {string[80]; {tfield.editMask}
  228.       validvalue = 15; {string;
  229.           {for numerics= minvalue, maxvalue}
  230.           {for strings= comma delimited list}
  231.       hint      = 16;  {string;}
  232.       helpid    = 17;  {longint;}
  233.       haslink   = 18;  {boolean;}
  234.       srclinktbl = 19; {string[20];}
  235.       srclinkfld = 20; {string[20];}
  236.       iscalc     = 21; {boolean;}
  237.  
  238.   PFieldDef = ^FieldDefRecType;
  239.   FieldDefRecType = record
  240.       fieldname : string[20];
  241.       scrprompt : string[20]; {tfield.DisplayName}
  242.       scrformat : string[20]; {tfield.DisplayText -- an editmask}
  243.       grdprompt : string[10];
  244.       grdwidth  : integer;    {tfield.DisplayWidth}
  245.       fldtype   : string[1];  {FieldTypeLtr}
  246.       fldlen    : integer;    {tfield.size}
  247.       flddec    : integer;
  248.       fldidx    : boolean;
  249.       idxexp    : string;
  250.       taborder  : integer;
  251.       required  : boolean;    {tfield.required}
  252.       default   : string[80];
  253.       editmask  : string[80]; {tfield.editMask}
  254.       validvalue : pchar;
  255.           {for numerics: minvalue, maxvalue}
  256.           {for strings: comma delimited list}
  257.       hint      : string;
  258.       helpid    : longint;
  259.       haslink   : boolean;
  260.       srclinktbl : string[20];
  261.       srclinkfld : string[20];
  262.       iscalc     : boolean;
  263.       next, prev : pFieldDef;
  264.       end;
  265.  
  266.     PtableDef = ^TableDefRecType;
  267.     TableDefRecType = record
  268.       tablename : string[20];
  269.       fieldDefs : PFieldDef;
  270.       next, prev : PTableDef;
  271.       end;
  272.  
  273.  
  274.       ***)
  275.  
  276. end.
  277.  
  278.